import Mock from 'mockjs'

interface Device {
  sn: string;
  password: string;
  isRegistered: boolean;
}

// 从 localStorage 中加载 deviceList,如果没有则使用包含 test 设备的初始值
const storedDeviceList = localStorage.getItem('deviceList')
const deviceList: Device[] = storedDeviceList ? JSON.parse(storedDeviceList) : [
  {
    sn: 'test',
    password: '123123',
    isRegistered: true
  }
]

// 将 deviceList 保存到 localStorage
localStorage.setItem('deviceList', JSON.stringify(deviceList))


// 验证 token 的函数
const validateToken = (token: string) => {
  console.log('要验证的 token:', token)
  // 从 token 中提取设备SN号
  const sn = token.replace('mock_token_', '')
  console.log('提取的设备SN号:', sn)
  // 查找设备
  const device = deviceList.find((device: Device) => device.sn === sn)
  console.log('根据设备SN号找到的设备:', device)
  // 如果设备存在且已注册,则 token 有效
  return device && device.isRegistered
}

// 模拟登录接口
Mock.mock('/api/login', 'post', (options: any) => {
  const { sn, password } = JSON.parse(options.body)
  const device = deviceList.find((device: Device) => device.sn === sn && device.password === password)
  if (device) {
    return {
      code: 200,
      message: '登录成功',
      data: {
        token: `mock_token_${device.sn}`,
        sn: device.sn,
        isRegistered: true // 表示设备已经注册过了
      }
    }
  } else {
    return {
      code: 401,
      message: '设备SN号或密码错误'
    }
  }
})

// 检查设备SN号是否存在的接口
Mock.mock('/api/checkSN', 'post', (options: any) => {
  const { sn } = JSON.parse(options.body)
  const device = deviceList.find((device: Device) => device.sn === sn)
  if (device) {
    return {
      code: 200,
      message: '设备SN号已存在'
    }
  } else {
    return {
      code: 404,
      message: '设备SN号不存在'
    }
  }
})

Mock.mock('/api/register', 'post', (options: any) => {
  const { sn, password } = JSON.parse(options.body)
  const existingDevice = deviceList.find((device: Device) => device.sn === sn)
  if (existingDevice) {
    return {
      code: 400,
      message: '设备SN号已存在'
    }
  } else {
    // 将新设备添加到设备列表中
    const newDevice: Device = { sn, password, isRegistered: true }
    deviceList.push(newDevice)
    localStorage.setItem('deviceList', JSON.stringify(deviceList))
    // 根据新添加的设备信息生成 token
    const token = `mock_token_${sn}`
    console.log('注册新设备,生成的 token:', token)
    console.log('注册新设备后的 deviceList:', deviceList)
    return {
      code: 200,
      message: '注册成功',
      data: {
        token: token,
        sn: sn
      }
    }
  }
})

// 添加一个受保护的 /api/device 接口
Mock.mock(/^\/api\/device(\?.+)?$/, 'get', (options: any) => {
  console.log('请求选项:', options)
  const body = JSON.parse(options.body)
  const token = body.token
  console.log('从请求体中获取的 token:', token)
  if (token && validateToken(token)) {
    // 如果 token 有效,从 token 中提取设备SN号
    const sn = token.replace('mock_token_', '')
    // 查找设备
    const device = deviceList.find((device: Device) => device.sn === sn)
    if (device) {
      return {
        code: 200,
        data: {
          sn: device.sn,
          isRegistered: device.isRegistered
        }
      }
    }
  }
  // 如果 token 无效或者设备不存在,返回 401 错误
  return {
    code: 401,
    message: '无效的 token'
  }
})
